package com.skyline.wo.dao;

import java.util.List;

import com.skyline.base.type.Activity;
import com.skyline.common.bean.Page;
import com.skyline.wo.model.Photo;

//TODO:加注释
public interface PhotoDao {
	/**
	 * 查询相册照片列表
	 * 
	 * @param albumId
	 *            相册Id
	 * @param authority
	 *            相册的权限
	 * @param page
	 *            分页用
	 * @return 相册列表
	 * 
	 */
	public List<Photo> queryPhotosWithDetailOfAlbum(long albumId, int authority, Page page);

	/**
	 * 修改照片权限和相册名，于所属相册同步
	 * 
	 * @param authority
	 *            权限
	 * @param alumName
	 *            相册名
	 * @param albumId
	 *            相册Id
	 * @return 相册列表
	 * 
	 */
	public void updatePhotoInfoOfAlbum(int authority, String alumName, long albumId);

	/**
	 * 查询照片详细信息
	 * 
	 * @param photoId
	 *            照片Id
	 * 
	 * @return 照片信息
	 * */
	public Photo queryPhotoDetailById(long photoId);

	/**
	 * 查询照片信息
	 * 
	 * @param photoId
	 *            照片Id
	 * 
	 * @return 照片信息
	 * */
	public Photo queryPhotoById(long photoId);

	/**
	 * 修改照片活动状态，于所属相册同步
	 * 
	 * @param albumId
	 *            相册Id
	 * @param activity
	 *            活动状态
	 * */
	public void updatePhotosActivityByAlbumId(long albumId, Activity activity);

	/**
	 * 用户图片访问量+1
	 * 
	 * @param albumId
	 *            相册Id
	 * @param photoId
	 *            图片Id
	 * @param addedCount
	 *            需要增加的数量
	 * */
	public void updateVisitCount(long albumId, long photoId, int addedCount);

	/**
	 * 批量插入照片记录
	 * 
	 * @param ownerId
	 *            用户Id
	 * @param ownerNickname
	 *            用户昵称
	 * @param ownerPortrait
	 *            用户头像
	 * @param albumId
	 *            所属相册的Id
	 * @param albumName
	 *            所属相册的名字
	 * @param authority
	 *            所属相册的权限
	 * @param activity
	 *            所属相册的状态
	 * @param fileKeys
	 *            图片文件的key
	 * @param middleFileKeys
	 *            中图文件的key
	 * @param smallFileKeys
	 *            小图文件的key
	 * @param fileExts
	 *            图片文件的格式
	 * @param fileSizes
	 *            图片文件大小
	 * */
	public List<Long> insertPhotosReturnIds(long ownerId, String ownerNickname, String ownerPortrait, long albumId,
			String albumName, int authority, Activity activity, List<String> fileKeys, List<String> middleFileKeys,
			List<String> smallFileKeys, List<String> fileExts, List<Long> fileSizes);

	/**
	 * 批量更新图片的描述信息
	 * 
	 * @param albumId
	 *            相册Id
	 * @param descriptions
	 *            图片描述
	 * @param ids
	 *            图片ID
	 * */
	public void updatePhotosDescription(long albumId, List<String> descriptions, List<Long> ids);

	/**
	 * 更新图片的描述信息
	 * 
	 * @param albumId
	 *            相册Id
	 * @param description
	 *            图片描述
	 * @param id
	 *            图片ID
	 * */
	public void updatePhotoDescription(long albumId, String description, long id);

	/**
	 * 更新图片的所属相册
	 * 
	 * @param photoId
	 *            图片Id
	 * @param albumId
	 *            目标相册Id
	 * */
	public void updatePhotoAlbum(long photoId, long albumId);

	/**
	 * 修改照片状态
	 * 
	 * @param albumId
	 *            相册Id
	 * @param photoId
	 *            图片Id
	 * @param activity
	 *            状态
	 * 
	 * */
	public void updatePhotoActivity(long albumId, long photoId, Activity activity);

	/**
	 * 列出相册中所有照片
	 * 
	 * */
	public List<Photo> queryPhotoFilesOfAlbum(long albumId, int authority);

	/**
	 * copy照片的记录（设为头像时需要把原来的图片复制到头像相册中）
	 * 
	 * @param destAlbumId
	 *            目标相册Id
	 * @param destAlbumName
	 *            目标相册名
	 * @param destActivity
	 *            目标相册状态
	 * @param srcPhotoId
	 *            源照片Id
	 * */
	public long insertByCopyExistPhotoReturnId(long destAlbumId, String destAlbumName, Activity destActivity,
			long srcPhotoId);
	
	/**
	 * 筛选相册最新的一张照片（排序后的第一张照片）
	 * 
	 * @param albumId
	 *            相册Id
	 * @param activity
	 *            需要的照片状态
	 * */
	public Photo queryLatestPhotoOfAlbum(long albumId, Activity activity);

	// /**
	// * 获取用户图片，带有权限判断，不含图片描述字段
	// *
	// * @param photoId
	// * 图片Id
	// * @param userId
	// * 用户Id
	// *
	// * */
	// public Photo queryUserPhotoById(long photoId, long userId);

	/** -------------------华丽的分割线，下面的还没实现呢-------------------------------- **/

	// /**
	// * 查询相册照片列表，不带描述信息
	// *
	// * @param albumId
	// * 相册Id
	// * @return 相册列表
	// *
	// */
	// public List<Photo> queryPhotosOfAlbum(long albumId);
	//

	//
	// public int countUserPhotoById(long photoId, long userId);
	//
	// public void updatePhotoName(long photoId, String photoName);

}
